package com.ruoyi.inspection.domain.receiveVo;

import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.constant.GlobalConstants;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.inspection.constant.InspectionConstant;
import com.ruoyi.system.domain.EnclosureInfo;
import com.ruoyi.system.domain.KeyPersonnelAdmin;
import com.ruoyi.system.domain.TemporaryStaffAccount;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
 * 上报人员基础信息
 */
@Slf4j
@Data
public class ReceiveEnclosure implements Serializable {
    //// 唯一编码，36 位uuid，必填
    private String id;
    // 边界名称
    private String zoneName;
    // 区域类型，0 临时区域，1 固定区域
    private String zoneType;
    ///唯一编码，36 位uuid
    private String geo;
    //企业编码，同“危险化学品登记信息管理系统”中的企业编码一致
    private String companyCode;
    // 删除状态 0 正常 1 删除
    private String deleted;
    /**
     * 创建人姓名，必填
     */
    private String createBy;
    /**
     * 创建时间，必填 时间格式 yyyy-MM-dd HH:mm:ss
     */
    private String createDate;
    /**
     * 修改人
     */
    private String updateBy;
    /**
     * 修改时间
     */
    private String updateDate;


    public static ReceiveEnclosure enclosureInfoToReceiveEnclosure(EnclosureInfo enclosure) {
        ReceiveEnclosure vo = new ReceiveEnclosure();
        String randId = enclosure.getGovernId();
        if (StringUtils.isNotEmpty(randId)) {
            return null;
        }
        randId = UUID.randomUUID().toString();
        // 转换为 坐标系大地-2000 的格式
        String geo2000 = getGeo2000JsonStr(enclosure.getCoordinates());
        log.error("围栏{}, geo-2000坐标数据 {}", enclosure.getName(), geo2000);

        vo.setId(randId);
        vo.setGeo(geo2000);
        vo.setZoneName(enclosure.getName());
        vo.setZoneType(enclosure.getZoneType());
        vo.setCompanyCode(GlobalConstants.COMPANY_CODE);
        vo.setCreateDate(DateUtils.getTime());
        vo.setUpdateDate(DateUtils.getTime());
        vo.setCreateBy("admin");
        vo.setUpdateBy("admin");
        vo.setDeleted("0");

        enclosure.setGovernId(vo.getId());
        return vo;
    }

    /**
     * 转换为大地GEO 2000标准格式
     * 大地GEO 2000标准格式: "{\"type\": \"Polygon\",\"coordinates\": [[[\"121.404118\", \"31.473502\"],[\"121.404694\", \"31.473074\"], [\"121.403888\", \"31.472520\"],[\"121.403291,31\", \"31.473029\"], [\"121.404118\", \"31.473502\"]]]}";
     *
     * @return
     */
    public static String getGeo2000JsonStr(String coordinates) {
        List<List<String>> positionList = null;
        if (StringUtils.isNotEmpty(coordinates)) {
            JSONArray jsonArray = JSONUtil.parseArray(coordinates);
            List<String> position = null;
            positionList = new ArrayList<>();
            for (Object o : jsonArray) {
                JSONObject jsonObj = (JSONObject) o;
                String lon = String.format("%.6f", jsonObj.getFloat("x"));
                String lat = String.format("%.6f", jsonObj.getFloat("y"));
                position = Arrays.asList(lon, lat);
                positionList.add(position);
            }
        }
        if (StringUtils.isEmpty(positionList)) {
            return null;
        }
        List<List<List<String>>> geoList = new ArrayList<>();
        geoList.add(positionList);
        JSONObject geoJson = new JSONObject();
        geoJson.putOnce("type", "Polygon");
        geoJson.putOnce("coordinates", geoList);

        return geoJson.toString();
    }

}
